package yy.zn.service;

import yy.zn.entity.*;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author LiuLei
 */
public interface DataService {

//    /**
//     * 获取 到货单信息
//     *
//     * @param bar 条码
//     * @return 到货单
//     */
//    ArrivalDl ARRIVAL_VOUCH(String bar);

    /**
     * 获取 到货单信息
     *
     * @param bar 条码
     * @return 到货单
     */
    ArrivalVouch ARRIVAL_VOUCH(String bar);
//
//    /**
//     * 获取 到货单信息列表
//     *
//     * @param code 单据信息
//     * @return 到货单
//     */
//    List<ArrivalDl> ARRIVAL_VOUCH_LIST(String code);

    /**
     * 获取 到货单信息列表
     *
     * @param code 单据信息
     * @return 到货单
     */
    List<ArrivalVouch> ARRIVAL_VOUCH_LIST(String code);

    /**
     * 获取 工单信息
     *
     * @param mocCode 任务令
     * @return 工单信息
     * @throws Exception 异常
     */
    Moco MOCO_LIST(String mocCode) throws Exception;

    /**
     * 查询储位信息
     *
     * @param barCode 储位条码
     * @return 储位信息
     */
    Goods GOODS(String barCode);

    /**
     * 查询储位信息
     *
     * @param barCode 储位条码
     * @return 储位信息
     */
    Map<String, Goods> GOODS_LIS(Set<String> barCode) throws Exception;

    /**
     * 接收或发送类型
     *
     * @param type 类型
     * @return {@code List<QueryInfo>}
     */
    List<QueryInfo> RECEIVE_OR_SEND_TYPE(int type);

    /**
     * 采购类型
     *
     * @return {@code List<QueryInfo>}
     */
    List<QueryInfo> PUR_TYPE();

    /**
     * 销售类型
     *
     * @return {@code List<QueryInfo>}
     */
    List<QueryInfo> SALE_TYPE();

    /**
     * 销售订单
     *
     * @param order 订单
     * @return {@code Map<String,SaleOrder>}
     */
    Map<String, SaleOrder> SALE_ORDER(String order);

    /**
     * 审核销售订单
     *
     * @param map 修改参数
     * @return int
     */
    int AUDIT_SALE_ORDER(Map<String, Object> map);

    /**
     * 查询存货信息
     *
     * @param param [物料编号、仓库]
     * @return 存货信息
     */
    List<Position> POSITION(Map<String, String> param);

    /**
     * 根据条码号查询 物料库存信息
     *
     * @param bar 条码号
     * @return 物料库存
     */
    List<Produce> PRODUCE_QTY(String bar);

    /**
     * 查询领料单
     *
     * @param bar 生产订单条码
     * @return 领料单信息
     */
    List<ProduceInv> PRODUCE_INV(String bar);


    /**
     * 根据物料编号查询物料信息
     *
     * @param bar 物料编号
     * @return 物料集
     */
    List<InvCode> GET_INV_BY_INVCODE(String bar);

    /**
     * 根据物料编号查询物料信息
     *
     * @param bar 物料编号
     * @return 物料集
     */
    List<InvCode> GET_INV_BY_INVCODE(List<String> bar);

    /**
     * 根据物料编号和批号查询库存信息
     *
     * @param invCode 物料编号
     * @param batch   批号
     * @return 库存信息
     */
    InvStock GET_STOCK_BY_INV_AND_BATCH(String invCode, String batch);

    /**
     * 根据存户信息查询时间
     *
     * @param curDate 库存信息查询条件
     * @return 时间
     */
    String CURRENT_STOCK_DATE(CurDate curDate);

    /**
     * 查询到货单详情
     * @param dto 查询条件
     * @return 到货单详情
     */
    List<ArrivalRepository> ARRIVAL_REPOSITORY(ArrivalResDto dto);

    /**
     * 获取所有仓库信息
     * @return
     */
    List<WareHouse> WAREHOUSE();

    /**
     * 根据储位编号和名称查看库存是否存在
     * @param code 储位编号
     * @param name 储位名称
     * @return 库存数
     */
    Integer findCurrentIsExistsByPositionCodeAndName(String code, String name);

    /**
     * 根据储位编号和名称查看库存是否存在
     * @param code 条码信息
     */
    List<Position> INV_STOCK(String code);

    /**
     * 现存量查询
     * @param invQuery 条码信息
     * @return 现存量信息
     */
    JsonPage<Inventory> INVENTORY(InvQuery invQuery);
}
